home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
newlooklib.lha
/
newlook
/
createcyclebutton.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-24
|
4KB
|
136 lines
/*
* CREATECYCLEBUTTON.C
*/
#include "newlook.h"
extern struct TextFont *OpenFont(struct TextAttr *);
extern void CloseFont(struct TextFont *);
extern LONG IntuiTextLength(struct IntuiText *);
static SHORT cycle_pairs[2*14]= {
12,8,
11,8, /*......................*/
11,9, /*.....*******......*+..*/
5,9, /*....**.....**.....*+..*/
4,8, /*....**.....**.....*+..*/
4,2, /*....**...******...*+..*/
5,8, /*....**....****....*+..*/
5,1, /*....**.....**.....*+..*/
11,1, /*....**............*+..*/
11,6, /*....**.....**.....*+..*/
9,4, /*.....*******......*+..*/
14,4, /*......................*/
12,6,
12,2
};
static SHORT csep_pairs[2][4]= { 18,1, 18,9, /* black */
19,1, 19,9 }; /* white */
struct Gadget *CreateCycleButton(x,y,w, tlist, id)
SHORT x,y,w;
STRPTR *tlist;
USHORT id;
{
struct Gadget *g;
struct IntuiText *it;
struct CycleInfo *ci;
struct Border *b, *c, *s0, *s1;
const SHORT h= 13;
ULONG UserHandle= SetNewLookHandle(PRIVATE_HANDLE);
if(g= (struct Gadget *)SmartAllocate(GADGETSIZE))
{
if(b= CreateBorder(0,0,w,h,FALSE))
{
if(c= (struct Border *)SmartAllocate(BORDERSIZE))
{
if(s0= (struct Border *)SmartAllocate(BORDERSIZE))
{
if(s1= (struct Border *)SmartAllocate(BORDERSIZE))
{
if(ci= (struct CycleInfo *)SmartAllocate(CYCLEINFOSIZE))
{
if(it= CreateIText(0,0,NULL))
{
struct TextFont *tf;
it->IText= (UBYTE *)*tlist;
if(tf= (struct TextFont *)OpenFont(&Topaz80))
{ it->TopEdge= (h-tf->tf_Baseline)/2;
CloseFont(tf);
}
else it->TopEdge= (h-6)/2; /* `known' topaz80 dimensions */
it->LeftEdge= (w+21-IntuiTextLength(it))/2;
/* cycle arrow */
c->LeftEdge = 2;
c->TopEdge = 1;
c->FrontPen = 1;
c->BackPen = 0;
c->DrawMode = JAM1;
c->Count = 14;
c->XY = cycle_pairs;
c->NextBorder = s0;
/* black seperator */
s0->LeftEdge = 2;
s0->TopEdge = 1;
s0->FrontPen = 1;
s0->BackPen = 0;
s0->DrawMode = JAM1;
s0->Count = 2;
s0->XY = csep_pairs[0];
s0->NextBorder = s1;
/* white seperator */
s1->LeftEdge = 2;
s1->TopEdge = 1;
s1->FrontPen = 2;
s1->BackPen = 0;
s1->DrawMode = JAM1;
s1->Count = 2;
s1->XY = csep_pairs[1];
s1->NextBorder = b;
/* struct CycleInfo */
ci->ci_UserData = (APTR)NULL;
ci->ci_IntuiText = it;
ci->ci_Items = tlist;
ci->ci_CurrentIndex = 0;
g->NextGadget = (struct Gadget *)NULL;
g->LeftEdge = x;
g->TopEdge = y;
g->Width = w;
g->Height = h;
g->Flags = GADGHCOMP;
g->Activation = GADGIMMEDIATE|RELVERIFY;
g->GadgetType = BOOLGADGET;
g->GadgetRender = (APTR)c;
g->SelectRender = (APTR)NULL;
g->GadgetText = it;
g->MutualExclude = (LONG)0L;
g->SpecialInfo = (APTR)NULL;
g->GadgetID = id;
g->UserData = (APTR)ci;
MakePrivateHandlePublic(UserHandle);
return g;
}
}
}
}
}
}
}
if(UserHandle != PRIVATE_HANDLE)
{ SmartFreeAll(PRIVATE_HANDLE);
(void)SetNewLookHandle(UserHandle);
}
return (struct Gadget *)NULL;
}